0.1交换authorizationID Request: { authorizationID: "aaaaa" } Response: { registerCompanyID : 1, placeID : 1 companyName : "aaa", placeLabel: "aaaaa" } select b.CompanyID as registerCompanyID, b.ID as placeID, a.name as companyName, b.label as placeLabel from Company a, Place b where a.ID = b.CompanyID and authorizationID = "$authorizationID" 1. 实时监控 1.1. 人员分类分类列表(VisitorType) Request: { companyID : 1 } Response: [ { ID : "label" } ] enum StatusID { 普通访客 黑名单 教师 学生 领导干部 } select ID, distinct label from VisitorType where RegisterCompanyID = 0 or RegisterCompanyID = "$companyID" 1.2. ImageTypeID Request: { } Response: [ { ID : "label" } ] enum ImageTypeID { Face1 = 1, // 正面照片1(交给人脸识别服务) Face2 = 2, // 正面照片2(存放到FaceImage表) FaceLSide, // (主体视角,<=45度)左侧脸照片(存放到FaceImage表) FaceRSide, // (主体视角,<=45度)右侧脸照片(存放到FaceImage表) FaceTSide, // (主体视角,<=45度)顶侧脸照片(存放到FaceImage表) FaceBSide, // (主体视角,<=45度)底侧脸照片(存放到FaceImage表) FaceUploaded, // 上传照片(存放到FaceImage表) Icon, // 图标(存放到Image表) IdentificationCard, // 身份证照片(存放到Image表) BusinessCard, // 名片照片(存放到Image表) OtherCard, // 其他证件(存放到Image表) } 1.2. StatusID Request: { } Response: [ { ID : "label" } ] enum StatusID { 未注册 已注册(访客) 来访登记(访客) 签离(访客) 签到(员工) 签退(员工) } 1.3. 人脸识别 通过图像获得faceID Request: { registerCompanyID : 123, // 若为-1则只搜索VisitFaceDB imgs : [ "image base64" ] // 对应多个人的人脸图像 # 使用http form post } Response: [ { registerCompanyID : 123, //找不到返回VisitDBFaceID,此项为-1 faceID : 1, isVisitDBFaceID : false, // : true, : false imgUrl : "", imgType : "" }, { faceID : -1, // 搜索无结果 } ] a)接收imgs二进制数据 b)转发到人脸识别服务(registerCompanyID, imgs) c)接收识别结果:,其中<(<0),0>表示未找到结果,<(<0),N>表示在访客数据库中找到人脸,表示在N公司中匹配人脸M d) 对于单个人脸结果: if <0,0> { // 搜索无结果 } else if (dbid < 0 && faceid != 0) { // 访客 // select PersonID from FaceImage where RegisterCompanyID="$dbid" and faceid="$faceid"; // select * from Person where PersonID="$PersonID" } else if (dbid > 0 && faceid != 0) { // 员工 // select * from FaceImage where RegisterCompanyID="$dbid" and faceid="$faceid"; // select * from Person where PersonID="$PersonID" } 1.4. 人脸总体信息查询 通过faceID获得Person简要信息 需要支持批量查询 Request: { companyID : 123, faceID : 123, isVisitDBFaceID : false // 如果为true则忽略companyID,faceID认为是visitDBFaceID } Response: { personID : 123, // 无效值表示没有对应的人ID personTypeID : 1, // 人员分类列表 visitStatusID : 1, // 访问状态 name : "name", checkingCompany : [123, 456], // 考勤公司ID列表 warning : false // 是否为警告 } 1.5. 访客注册(见2 人员注册) 1.6. 更改人员考勤状态(签到、签退、签离) 需要支持批量查询 Request: { placeID : 123, personID : 123, visitStatusID : 1 // 设置访问状态 } Response: 成功/错误结果 1.6.1. 人脸识别及状态修改 整合:通过人脸图像,完成状态修改,返回当前状态 (整合1.3. 1.4. 1.6.) Request: { placeID : 123, // 若为-1则只搜索VisitFaceDB enterOrExit : 1 // 签到、签退/签离 imgs : [ "image base64" ] // 对应多个人的人脸图像 } Response: [ { personID : 123, visitStatusID : 1 // 更新之后的访问状态 }, { faceID : -1, // 人脸搜索无结果 }, { //业务错误: 9.1. 通用成功/错误结果 } ] 参考1.3. a)b)c)d) e) 对于单个人脸结果: // "$person.id" select CompanyID from Place where placeID="$placeID" isChecking = select * CheckingCompany where CompanyID = "$CompanyID" and PersonID="$PersonID" if (enterOrExit == 签到) // 入口摄像头 { if (isChecking) checking(PersonID, placeID); return person current status else return person status not changed; } else if (enterOrExit == 签退/签离) // 出口摄像头 { if (isChecking) unchecking(PersonID, placeID); return person current status else unvisit(PersonID, placeID); return person current status } checking: noNeedInsertNewRecord = select * from Checking where StatusID = "$NewStatusID" and statusDt + 5second > now() and PersonID = "$PersonID" and PlaceID="$PlaceID" if (!noNeedInsertNewRecord) { insert into Checking(...); } unvisit noNeedInsertNewRecord = ... if (!noNeedInsertNewRecord) { // get last visit event select * from Visit where VisitorPersonID="$PersonID" and CompanyID="$CompanyID" order by startTime desc limit 1 insert into Visiting update Visit LastStatusID, lastTime } 1.7. 查询人员来访/签到状态 需要支持批量查询 Request: { companyID : 1, personID : 123, } Response: { visitStatusID : 1 // 访问状态 } 1.8. 更改人员来访状态(来访登记) 见3 添加来访记录 2. 人员注册 2.1. 国籍列表 2.2. 证件类型 2.3. 注册人员 Request: { registerCompanyID : 123, name : "", companyName : "", // ... } Response: { companyID : 123, personID : 123 } a) find by name, (IdentityTypeID, identity), phone ... from Person b) if Person exists return error c) else insert into Person d) companyID = (select * from or insert Company where name = "$companyName") e) department_id , Post_id f) 2.4. 注册访客人脸(visit face register) Request: { registerCompanyID : 123, personID : 123, imgs : { ImageTypeID : "image base64" } // 对应一个人的若干个人脸图像 } Response: { faceIDs : [ 123 ] } a)select exists(*) from person where id="$personID" b)if not exists return error c)根据image type保存图片 d)调用人脸识别服务[faceids]=(registerCompanyID, dbid=-1, img) e)对于每一个faceid,insert into VisitFace ("$FaceID", $PersonID, "$VisitFace.imagePath") 3. 来访登记 3.1. 获得来访人员列表 返回按姓名缩写升序的结果 Request: { companyID : 123, // 设备所在学校ID,0表示所有公司,仅供管理接口使用 beginPage : 0, endPage : 0 } Response: [ { personID : 123, RegisterCompanyID : 123, name : "aaa", img : "image url" // 非字符串表示使用默认图标 } ] set @companyID =1; select vs.person_id, vs.register_company_id, pe.name, img.image_type, img.image_path from visit_stat vs join person pe on (@companyID=0 or vs.register_company_id = @companyID) and (vs.person_id = pe.id) left outer join Image img on (pe.id = img.person_id and img.image_type=8) -- icon limit ... 3.2. 获得被访人员列表 返回按姓名缩写升序的结果 Request: { companyID : 123, beginPage : 0, endPage : 0 } Response: [ { personID : 123, name : "aaa", department : "aaa", img : "image url" // 非字符串表示使用默认图标 } ] set @companyID =1; select * from person pe where pe.company_id = @companyID 3.2. 搜索 (3. 4. 5. 6.) 来访人员,如果没有给出搜索字段时,显示本校曾经来访人员列表VisitStat;如果给出关键字,则搜索全部人员 被访人员,本公司员工列表 Request: { registerCompanyID : 123, isVisitor : true beginPage : 0, endPage : 0, nameSpell : "" } Response: { } #todo 被访考虑和人员列表合并 if isVisitor select * from visit_stat vs left outer join person pe on vs.person_id = person.id where vs.register_company_id = "$registerCompanyID" and pe.name_spell like "$nameSpell%" else select * from person where CompanyID = "$registerCompanyID" and name_spell like "$nameSpell%" 3.3. 获得来访/被访人员详细信息(visitor/visitee) Request: { personID : 123, isVisitor : true } Response: { companyID : 123, name : "aaa", companyName : "", department : "aaa", img : "image url" // 非字符串表示使用默认图标 // ... } 3.4. 添加来访记录 Request: { placeID : 123, visitorPersonID : 123, visiteePersonID : 123, matter : "aaa", // 数字表示使用预定义标签ID remark : "" } Response: 成功/错误结果 insert or update VisitStat 3.5. 获得拜访事由选项列表 Request: { } Response: [ { ID : "label" } ] 4. 电话呼叫 4.1. 获得人员列表(同被访人员列表) 4.2. 添加呼叫记录 5. 访客管理 5.1. 获得来访列表 Request: { companyID : 123, beginDt : "", endDt : "" } Response: [ { visitID : 1, visitorPersonID : 123, visitorName : "", lastStatusID : 1, dt : "" } ] 5.2. 访客信息 5.2. 获得来访详细信息 Request: { visitID : 1 } Response: { visitorPersonID visitorName : "", // ... visiteePersonID : 123, // ... imgChar : "image url", imgIdentity : "image url" } 6. 考勤记录 6.1. 获得考勤列表 根据日期、personID聚类 Request: { companyID : 123, beginDt : "", endDt : "" } Response: [ { personID : 123, name : "", lastStatusID : 1, dt : "" } ] 6.2. 获得考勤详细信息 Request: { personID : 123 beginDt : "", endDt : "" } Response: { { id : 123, place : "", // ... } } 6.2. 返回人员详细信息API 见 3.3. 7. 配置 8. 其他实体操作 9. 总体接口 9.1. 通用成功/错误结果 Response: { errcode : 0, // 0表示执行成功,否则为失败错误代码 msg:"aaaaa" // 执行结果附加消息 }